﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.Web.UI;
using System.Web.UI.WebControls;
using BlackEagleClient.DatingReference;
using BlackEagleLibrary;
using System.Threading;
using System.Globalization;


namespace BlackEagleClient
{
    public partial class MyPage : System.Web.UI.Page
    {
        
        List<PersonComposite> friends = new List<PersonComposite>();
        List<PersonComposite> friendRequests = new List<PersonComposite>();
        List<PersonComposite> items = new List<PersonComposite>();
        IEnumerable<PersonComposite> Items
        {
            get { return items; }
        }

        /// <summary>
        /// Kallar på CheckImg i CustomMethods för att kontrollera om en bilds URL är giltig eller inte
        /// Om den inte är giltig så returneras en alternativ bild, beroende på kön
        /// </summary>
        /// <param name="url"></param>
        /// <param name="sex"></param>
        /// <returns></returns>
        public string CheckImg(string url, int sex)
        {
            return CustomMethods.CheckImg(url, sex);
        }

        /// <summary>
        /// Returnerar en sträng ("Male" eller "Female") beroende på värdet i sex
        /// </summary>
        /// <param name="sex"></param>
        /// <returns></returns>
        public string GetSex(int s)
        {
            return CustomMethods.GetSex(s);
        }

        /// <summary>
        /// Kallar på CalculateAge i CustomMethods som räknar ut ålder utifrån ett datum
        /// </summary>
        /// <param name="birthday"></param>
        /// <returns></returns>
        public static string CalculateAge(DateTime birthday)
        {
            return CustomMethods.CalculateAge(birthday);
        }

        /// <summary>
        /// Kallar på ProfileURL i CustomMethod som returnerar en länk till profilen med id som man skickar som parameter
        /// </summary>
        /// <param name="ID"></param>
        /// <returns></returns>
        protected string ProfileUrl(string ID)
        {
            return CustomMethods.ProfileUrl(ID);
        }

        
        /// <summary>
        /// Ändrar kultur beroende sessionsvariabeln "SelectedCulture"
        /// </summary>
        protected override void InitializeCulture()
        {
            base.InitializeCulture();
            if (Session["SelectedCulture"] != null)
            {
                string culture = Session["SelectedCulture"] as string;
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
                Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
            }
        }

        /// <summary>
        /// Lyssnar för att acceptera en vänförfrågan
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnAccept_Command(object sender, CommandEventArgs e)
        {
            Guid friend1 = Guid.Parse(e.CommandArgument.ToString());
            using (DatingServiceClient client = new DatingServiceClient())
            {
                //Kallar på AcceptFriendRequest i WCF:en som ändrar Friendship.Confirmed till True där id matchar med parametrarna.
                client.AcceptFriendRequest(friend1, Guid.Parse(WebProfile.Current.ID));
                Response.Redirect("MyPage.aspx");
            }
        }

        /// <summary>
        /// Lyssnare för att neka en vänskap
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnDecline_Command(object sender, CommandEventArgs e)
        {
            Guid friend1 = Guid.Parse(e.CommandArgument.ToString());
            using (DatingServiceClient client = new DatingServiceClient())
            {
                //Kallar på AcceptFriendRequest i WCF:en som tar bort Friendship där id matchar med parametrarna.
                client.DenyFriendRequest(friend1, Guid.Parse(WebProfile.Current.ID));
                Response.Redirect("MyPage.aspx");
            }
        }
        
      
        protected void Page_Load(object sender, EventArgs e)
        {
            //Kontrollerar att besökaren är inloggad
            if (HttpContext.Current.User.Identity.IsAuthenticated)
            {
                Guid id = new Guid(WebProfile.Current.ID);

                using (DatingServiceClient client = new DatingServiceClient())
                {
                    //Är användaren inloggad hämtas profilen för användaren som är inloggad
                    items.Add(client.GetProfile(id)); //Profilen
                    friends = client.GetFriends(id); //Vänner
                   friendRequests = client.GetFriendRequests(id); //Vänförfrågan

                    myProfile.DataSource = items;
                    myFriends.DataSource = friends;
                    requests.DataSource = friendRequests;

                    if (!IsPostBack) //Binder datan om det inte är en omladdning av sidan
                    {
                        myFriends.DataBind();
                        requests.DataBind();
                        myProfile.DataBind();
                    }

                    //Kod för hantera/räkna nya vänansökan och nya meddelanden
                    Label msgLabel = (Label)Master.FindControl("loginViewMasterCount").FindControl("lblCountMsg");
                    if (msgLabel != null)
                    {
                        int counter = client.CountNewMessages(id);
                        msgLabel.Text = counter.ToString();
                    }

                    Label friendLabel = (Label)Master.FindControl("loginViewMasterCount").FindControl("lblCountFriend");
                    if (friendLabel != null)
                    {
                        int counter = client.CountNewFriends(id);
                        friendLabel.Text = counter.ToString();
                    }
                }
            }
            else
            {
                //Är besökaren inte inloggad skickas hen till inloggningssidan
                Response.Redirect("/account/Login.aspx");
            }
            
        }
    }
}